package com.example.demo.base.login.controller;



import com.example.demo.base.login.dto.AdminAcativityVo;
import com.example.demo.base.login.dto.LoginVo;
import com.example.demo.base.login.dto.LoginWebVo;
import com.example.demo.base.login.service.ExamUserService;
import com.example.demo.dto.ResponseDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.security.PublicKey;

/**
 * Created by Meloa on 2020/11/29.
 */
@RequestMapping("/login")
@RestController
public class LoginController {
    @Autowired
    ExamUserService examUserService;


    /**
     * 1.所有登录都是手机号加密码
     *  前端送RSA加密的账号，密码过来
     *  登陆方式和用户类型，账号，密码必输
     *  同一个账户，只支持一个在线，第二个上线的会把第一个的挤下去
     * 2.公司管理员或者公司普通员工登录
     *  第一次登录，需要先修改密码。
     * @param loginVo
     * @param request
     * @return
     */

    @PostMapping("/userLogin")   // 接收前端传来的登入信息loginVo ，以及参数校验返回的信息 request
    public ResponseDto userLogin(@Valid @RequestBody LoginVo loginVo, HttpServletRequest request) {
        return new ResponseDto<>().buildSucceedHasData(examUserService.userLogin(loginVo, request));
    }


    /**
     * 获取公钥，登陆的时候送账号密码加密用
     * 每次登陆前都要获取，过一段时间会变
     * @return
     */
    @RequestMapping("/getPublicKey")
    public ResponseDto getPublicKey() {

        return new ResponseDto<>().buildSucceedHasData(examUserService.getPublicKey());

    }

    // 更改密码
    @RequestMapping("/modifyPwd")
    public ResponseDto modifyPwd(@Valid @RequestBody LoginVo loginVo) {
        examUserService.modifyPwd(loginVo);
        return new ResponseDto<>().buildSucceedHasData(true);
    }


    /**
     * 获取短信验证码
     * @param loginVo
     * @return
     */
    @PostMapping("/getPhoneCode")
    public ResponseDto getPhoneCode(@Valid @RequestBody LoginVo loginVo) {
        examUserService.getPhoneCode(loginVo);
        return new ResponseDto<>().buildSucceedHasData(true);
    }


    /**
     * 公司用户第一次登录的时候，需要激活账号，绑定手机号以及修改默认密码
     * @param adminAcativityVo
     * @return
     * @throws Exception
     */
    @PostMapping("/adminAcativity")
    public ResponseDto adminAcativity(@Valid @RequestBody AdminAcativityVo adminAcativityVo) throws Exception {

        examUserService.adminAcativity(adminAcativityVo);
        return new ResponseDto<>().buildSucceedHasData(true);
    }
}
